1
火星上的平行運算
AI017Lesson 8
00:00

火星上的平行運算是一門管理多個獨立作業(例如探測車導航、生命訊號遙測與衛星上傳)的藝術,且不會導致系統停頓。在 Go 中,一個 獨立執行的工作 稱為 goroutine

1. 非確定性原則

最佳做法是永遠假設不同 goroutine 中的操作 可能以任何順序執行。由於 Go 執行環境會在可用的核心之間排程任務,因此若無明確的同步機制,我們無法依賴某台探測車完成掃描後,另一台才開始傳送資料。

go printGopher(c) // 啟動一個新的獨立任務

2. 同步機制

為了管理這些任務,Go 提供了兩個主要工具:

  • 互斥鎖: goroutine 可使用一個 mutex 來排除彼此在同一時間執行某項操作。
  • select 語句: 這類似於 switch 語句,其中每個 case 都包含一個通道接收或傳送操作。 select 會等待至某一情況就緒,然後執行該情況。
企鵝管理員(安全帽與記事本)SELECT探測車 α探測車 β

3. 工作者骨架

長期運行的工作者通常會結合無限迴圈與 select 來同時監控多個通訊通道:

func worker() {
for {
select {
// 在這裡等待通道
}
}
}
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>